package com.smart.community.work.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.work.dto.StaffQueryDTO;
import com.smart.community.work.vo.StaffVO;

import java.util.List;

/**
 * 员工管理Service接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
public interface StaffService {

    /**
     * 分页查询员工列表
     * 
     * @param page 分页参数
     * @param queryDTO 查询条件
     * @param currentUserId 当前用户ID
     * @return 员工列表
     * @throws Exception 统一异常
     */
    IPage<StaffVO> selectStaffPage(Page<StaffVO> page, StaffQueryDTO queryDTO, Long currentUserId) throws Exception;

    /**
     * 根据ID查询员工详情
     * 
     * @param staffId 员工ID
     * @param propertyCompanyId 物业公司ID（可选，用于精确查询）
     * @param currentUserId 当前用户ID
     * @return 员工详情
     * @throws Exception 统一异常
     */
    StaffVO getStaffById(Long staffId, Long propertyCompanyId, Long currentUserId) throws Exception;

    /**
     * 添加员工到物业公司
     * 
     * @param staffDTO 员工信息
     * @param currentUserId 当前用户ID
     * @return 用户ID
     * @throws Exception 统一异常
     */
    Long addStaff(StaffQueryDTO staffDTO, Long currentUserId) throws Exception;

    /**
     * 更新员工信息
     * 
     * @param staffId 员工ID
     * @param staffDTO 员工信息
     * @param currentUserId 当前用户ID
     * @throws Exception 统一异常
     */
    void updateStaff(Long staffId, StaffQueryDTO staffDTO, Long currentUserId) throws Exception;

    /**
     * 从物业公司移除员工
     * 
     * @param staffId 员工ID
     * @param currentUserId 当前用户ID
     * @throws Exception 统一异常
     */
    void deleteStaff(Long staffId, Long currentUserId) throws Exception;

    /**
     * 更新员工状态
     * 
     * @param staffId 员工ID
     * @param status 状态
     * @param currentUserId 当前用户ID
     * @throws Exception 统一异常
     */
    void updateStaffStatus(Long staffId, Integer status, Long currentUserId) throws Exception;

    /**
     * 搜索员工
     * 
     * @param queryDTO 查询条件
     * @param currentUserId 当前用户ID
     * @return 员工列表
     * @throws Exception 统一异常
     */
    List<StaffVO> searchStaff(StaffQueryDTO queryDTO, Long currentUserId) throws Exception;
}
